﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autocentro.Entities;
using Autocentro.Respository;
using Microsoft.Practices.Unity;

namespace Autocentro.BussinesLogic
{
    public class TrabajadorBL:MasterRepository,ITrabajadorBL
    {
        [Dependency]
        public ITrabajadorRepository TrabajadorRepository { get; set; }
        public List<TRABAJADOR> GetAllFromTrabajadores()
        {
            return TrabajadorRepository.GetAllFromTrabajadores();
        }

        public List<TRABAJADOR> GetFromTrabajadoresByCriterio(string criterio)
        {
            return TrabajadorRepository.GEtFromTrabajadoresByCriterio(criterio);
        }

        public TRABAJADOR GetTrabajadorById(int id)
        {
            return TrabajadorRepository.GetFromTrbajadorBydID(id);
        }

        public TRABAJADOR GetTrbajadorByDni(string dni)
        {
            return TrabajadorRepository.GetTRabajadorByDni(dni);
        }

        public void AddTrabajador(TRABAJADOR trabajador)
        {
            var msg = "";
            var ok = trabajador.Validate(out msg);
            if (ok)
            {
                var duplicidad = TrabajadorRepository.ExisteDuplicidadTrabajador(trabajador.Dni,trabajador.Id);
                var existeImg = TrabajadorRepository.ExisteImagenHash(trabajador.ImagenTrabajador.Hash, trabajador.Id);

                if (!duplicidad && !existeImg)
                {
                    TrabajadorRepository.AddTrabajador(trabajador);
                }
                else if(duplicidad)
                {
                    var error = string.Format("Ya existe un trabajador con el mismo Dni" + " " + "\n" + trabajador.Dni);
                    throw new Exception(error);
                }
                else if (existeImg)
                {
                     var error = string.Format("Ya existe un trabajador con la misma Imagen.");
                    throw new Exception(error);
                }
            }
            else
            {
                throw new Exception(msg);
            }
        }

        public void UpdateTrabajador(TRABAJADOR trabajador)
        {
            var msg = "";
            var ok = trabajador.Validate(out msg);
            if (ok)
            {
                var duplicidad = TrabajadorRepository.ExisteDuplicidadTrabajador(trabajador.Dni,trabajador.Id);
                var existeImg = TrabajadorRepository.ExisteImagenHash(trabajador.ImagenTrabajador.Hash,trabajador.Id);
                if (!duplicidad && !existeImg)
                {
                    TrabajadorRepository.UpdateTrbajador(trabajador);
                }
                else if (existeImg)
                {
                    var error = string.Format("Ya existe un Trabajador con la misma Imagen.");
                    throw new Exception(error);
                }
                else if (duplicidad)
                {
                    var error = string.Format("Ya existe un trabajador con el mismo dni" + " " + "\n" + trabajador.Dni);
                    throw new Exception(error);
                }
            }
            else
            {
                throw new Exception(msg);
            }
        }

        public void RemoveTrbajador(int id)
        {
            TrabajadorRepository.DeleteTrabajador(id);
        }

        public bool ExisteDuplicidadTrabajador(string dni, int id)
        {
            return TrabajadorRepository.ExisteDuplicidadTrabajador(dni, id);
        }
    }
}
